
using System;
using System.Text;
using LastFMGenNHibernate.CEN;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Criterion;
using NHibernate.Exceptions;
using LastFMGenNHibernate.EN.LastFM;

namespace LastFMGenNHibernate.CAD.LastFM
{
        public partial class GrupoCAD : BasicCAD, IGrupoCAD
        {
        public GrupoCAD() : base ()
        {
        }

        public GrupoCAD(ISession sessionAux) : base (sessionAux)
        {
        }



        public GrupoEN ReadOIDDefault (int id)
        {
                GrupoEN grupoEN = null;

                try
                {
                        SesssionInitializeTransaction ();
                        grupoEN = (GrupoEN)session.Load (typeof(GrupoEN),
                                id

                                );
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in GrupoCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }

                return grupoEN;
        }


        public int New_ (GrupoEN grupo)
        {
                try
                {
                        SesssionInitializeTransaction ();
                        if (grupo.Cancion != null) {
                                for (int i = 0; i < grupo.Cancion.Count; i++)
                                        grupo.Cancion [i] = (LastFMGenNHibernate.EN.LastFM.CancionEN)session.Load (typeof(LastFMGenNHibernate.EN.LastFM.CancionEN), grupo.Cancion [i].Id);
                        }
                        if (grupo.Grupo != null) {
                                grupo.Grupo = (LastFMGenNHibernate.EN.LastFM.GrupoEN)session.Load (typeof(LastFMGenNHibernate.EN.LastFM.GrupoEN), grupo.Grupo.Id);
                        }
                        if (grupo.Album != null) {
                                for (int i = 0; i < grupo.Album.Count; i++)
                                        grupo.Album [i] = (LastFMGenNHibernate.EN.LastFM.AlbumEN)session.Load (typeof(LastFMGenNHibernate.EN.LastFM.AlbumEN), grupo.Album [i].Id);
                        }

                        session.Save (grupo);
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in GrupoCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }

                return grupo.Id;
        }

        public void Destroy (int id)
        {
                try
                {
                        SesssionInitializeTransaction ();
                        GrupoEN grupoEN = (GrupoEN)session.Load (typeof(GrupoEN),
                                id

                                );
                        session.Delete (grupoEN);
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in GrupoCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }
        }

        public void Modify (GrupoEN grupo)
        {
                try
                {
                        SesssionInitializeTransaction ();
                        GrupoEN grupoEN = (GrupoEN)session.Load (typeof(GrupoEN), grupo.Id);

                        grupoEN.Etiqueta = grupo.Etiqueta;


                        grupoEN.Nombre = grupo.Nombre;


                        grupoEN.Valor = grupo.Valor;


                        grupoEN.NombreGrupo = grupo.NombreGrupo;

                        session.Update (grupoEN);
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in GrupoCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }
        }
        public System.Collections.Generic.IList<GrupoEN> DevolverGrupos (int first, int size)
        {
                System.Collections.Generic.IList<GrupoEN> result = null;
                try
                {
                        SesssionInitializeTransaction ();
                        if (size > 0)
                                result = session.CreateCriteria (typeof(GrupoEN)).
                                         SetFirstResult (first).SetMaxResults (size).List<GrupoEN>();
                        else
                                result = session.CreateCriteria (typeof(GrupoEN)).List<GrupoEN>();
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in GrupoCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }

                return result;
        }
        }
}
